/*
 * @Author: 9ilk 3535851673@qq.com
 * @Date: 2024-11-10 21:58:31
 * @LastEditors: 9ilk 3535851673@qq.com
 * @LastEditTime: 2024-11-12 22:45:07
 * @FilePath: /zhuang/Signal/Signal.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string>
#include <vector>
#include <functional>
using namespace std;

int main()
{
    if (fork() == 0)
    {
        sleep(1);
        int a = 10;
        a = a / 0;
        exit(0);
    }
    int status = 0;
    waitpid(-1, &status, 0);
    printf("exit signal: %d, core dump : %d\n", status & 0x7f, (status >> 7) & 1);
    return 0;
}

// void handler(int signo)
// {
//   cout << "Signal number is " << signo << endl;
// }

// int main()
// {
//     //signal(8,handler);
//     int a = 2;
//     a = a / 0;
//     // signal(11,handler);
//     // int* p =nullptr;
//     // *p = 100;
//     while(true);
//     return 0;
// }

// using func_t = function<void()>;
// int gcount = 0;
// vector<func_t> gfuncs;

// void handler(int signo)
// {
//   for(auto& f: gfuncs)
//     f();
//   cout << "gcount: " <<gcount<<endl;
//   alarm(1);
// }

// int main()
// {
//     gfuncs.push_back([](){
//        cout << "我是一个内核刷新任务" <<endl;
//     });

//       gfuncs.push_back([](){
//        cout << "我是一个检测时间片的任务" <<endl;
//     });

//       gfuncs.push_back([](){
//        cout << "我是一个内存管理任务" <<endl;
//     });
//     alarm(1);
//     signal(SIGALRM,handler);
//     while(true)
//     {
//         pause();
//         cout << "我醒来了.." <<endl;
//         gcount++;
//     }

//     return 0;
// }

// void handler(int signo)
// {
//     cout << "Signal num is :" << signo << endl;
// }

// void Usage(string poc)
// {
//     cout << "Usage: " << poc << " signalNum  PorcessID" << endl;
// }

// int num = 0;
// // ./mykill signal PID
// void handler(int signo)
// {
//     cout << "signo:" << signo << " num :" << num << endl;
//     exit(0);
// }

// int main(int argc, char *argv[])
// {

//     alarm(1);
//     signal(SIGALRM, handler);
//     while (true)
//     {
//         num++;
//     }

// int cnt = 5;
// while(cnt--)
// {
//     cout << "hello alive, "<<cnt <<endl;
//     sleep(1);
// }
// abort();
// if(argc != 3)
// {
//     Usage(argv[0]);
//     exit(1);
// }

// int signalNum = stoi(argv[1]);
// pid_t id = stoi(argv[2]);
// int n = ::kill(id,signalNum);
// if(n < 0)
// {
//     perror("kill error");
//     exit(2);
// }
// exit(0);
// for(int signo = 1;signo < 32;signo++)
// {
//   signal(signo,handler);
//   cout << "自定义捕捉信号: " << signo << endl;
// }
// while (true)
//     // {
//     //     cout << "hello world" << endl;
//     //     sleep(1);
//     // }
//     return 0;
// }